//
//  BaseViewController.h
//  Project
//
//  Created by liting on 2025/8/29.
//

#import <UIKit/UIKit.h>
#import <MJRefresh/MJRefresh.h>

NS_ASSUME_NONNULL_BEGIN

@interface BaseViewController : UIViewController

#pragma mark - 自定义导航栏
@property (nonatomic, strong) UIView *customNavBar;
@property (nonatomic, strong) UIButton *backButton;
@property (nonatomic, strong) UILabel *titleLabel;
@property (nonatomic, strong) UIView *navBottomLine;

/**
 设置导航栏标题
 @param title 标题文字
 */
- (void)setNavTitle:(NSString *)title;

/**
 添加右侧按钮
 @param title 按钮文字
 @param image 按钮图片
 @param action 点击事件
 @return 创建的按钮
 */
- (UIButton *)addRightButtonWithTitle:(nullable NSString *)title
                                image:(nullable UIImage *)image
                               action:(SEL)action;

#pragma mark - 表格视图懒加载
@property (nonatomic, strong) UITableView *tableView;
@property (nonatomic, strong) UICollectionView *collectionView;

/**
 创建表格视图（懒加载）
 @param style 表格样式
 @return UITableView实例
 */
- (UITableView *)setupTableViewWithStyle:(UITableViewStyle)style;

/**
 创建集合视图（懒加载）
 @param layout 布局对象
 @return UICollectionView实例
 */
- (UICollectionView *)setupCollectionViewWithLayout:(UICollectionViewLayout *)layout;

/**
 隐藏返回按钮
 */
- (void)hiddenBackBtn;

- (UILabel *)setupNativeLabel;

#pragma mark - 刷新加载功能
@property (nonatomic, assign) NSInteger currentPage;
@property (nonatomic, assign) BOOL hasMoreData;

/**
 添加上拉加载功能
 @param scrollView 滚动视图
 */
- (void)addRefreshHeaderWithScrollView:(UIScrollView *)scrollView;

/**
 添加下拉刷新功能
 @param scrollView 滚动视图
 */
- (void)addLoadMoreFooterWithScrollView:(UIScrollView *)scrollView;

/**
 开始下拉刷新
 */
- (void)beginRefreshing;

/**
 结束刷新状态
 */
- (void)endRefreshing;

/**
 显示无更多数据
 */
- (void)endRefreshingWithNoMoreData;

/**
 重置无更多数据状态
 */
- (void)resetNoMoreData;

#pragma mark - 页面导航方法
/**
 返回上一页
 */
- (void)backToPreviousViewController;

/**
 返回到指定类名的页面
 @param className 目标ViewController类名
 */
- (void)backToViewControllerWithClassName:(NSString *)className;

/**
 返回到根页面
 */
- (void)backToRootViewController;

#pragma mark - 子类重写的方法
/**
 下拉刷新回调（子类重写）
 */
- (void)loadNewData;

/**
 上拉加载回调（子类重写）
 */
- (void)loadMoreData;

@end

NS_ASSUME_NONNULL_END
